Technical Q&A QA1274
Filtering QuickTime media types using Navigation Services


Q: QuickTime Ç≈äJÇØÇÈÇ∑Ç◊ǃÇÃÉtÉ@ÉCÉãÇÉtÉBÉãÉ^ÉäÉìÉOÇ∑ÇÈÇΩÇflÇ…ÅAQ&A 1152 Ç≈ê‡ñæÇ≥ÇÍǃǢÇÈÇÊǧDžÅAé©ï™Çà Navigation Services ÉtÉBÉãÉ^ÉvÉçÉVÅ[ÉWÉÉÇÃíÜÇ≈ CanQuickTimeOpenFile ä÷êîÇégópǵǃǢNjÇ∑ÅBǵǩǵÅAÇ≥ÇÁDžDZÇÃÉäÉXÉgÇÅAÉIÅ[ÉfÉBÉIÉtÉ@ÉCÉãǻǫì¡íËÇÃÉÅÉfÉBÉAÉ^ÉCÉvÇÃÉtÉ@ÉCÉãÇæÇØÇ…å¿íËǵÇΩÇ¢ÇΔLJçlǶǃǢNjÇ∑ÅBDZÇÍÇé¿åªÇ∑ÇÈä»íPÇ»ï˚ñ@ÇÕdžÇËÇ‹Ç∑Ç©ÅH

A: džÇËÇ‹Ç∑ÅBGetMovieIndTrackType ä÷êîÇégǡǃÅAtrackType ÉtÉBÅ[ÉãÉhÇ…ÉÅÉfÉBÉAÉ^ÉCÉvÇéwíËÇ∑ÇÈDZÇΔÇ…ÇÊÇËÅAÉtÉ@ÉCÉãÇÃDZÇÃÉäÉXÉgÇì¡íËÇÃÉÅÉfÉBÉAÉ^ÉCÉvÅiFlashÅASoundÅAMusicÅAMPEGÅAǻǫÅjÇÃÉtÉ@ÉCÉãÇ…å¿íËÇ≈Ç´Ç‹Ç∑ÅB

GetMovieIndTrackType ÇÃégópÇÕÅAÉÄÅ[ÉrÅ[ÇÃíÜÇ…éwíËǵÇΩÉÅÉfÉBÉAÉ^ÉCÉvÇÃÉgÉâÉbÉNÇ™ä‹Ç‹ÇÍǃǢÇÈǩǫǧǩÇåüèoÇ∑ÇÈÇÃÇ…ç≈ìKÇ≈Ç∑ÅBí«â¡ÇÃèàóùÇçsǧó\íËÇ≈džÇÍÇŒÅAÉAÉvÉäÉPÅ[ÉVÉáÉìÇ™ÉTÉ|Å[ÉgǵǃǢÇÈì¡íËÇÃÉÅÉfÉBÉAÉ^ÉCÉvÇíTÇ∑ïKóvǙdžÇÈDZÇΔLJçlǶÇÁÇÍÇ‹Ç∑ÅB

GetMovieIndTrackType ä÷êîÇégǧÇΔÅAé¿ç€Ç…ÉtÉ@ÉCÉãÇäJÇ≠ïKóvǙdžÇÈÇΩÇflÅAìñëRÅAÉtÉBÉãÉ^èàóùÇÃë¨ìxÇ™í·â∫Ç∑ÇÈâ¬î\ê´Ç™Ç†ÇËÇ‹Ç∑ÅBÇ∑Ç◊ǃÇÃÉtÉ@ÉCÉãÇäJǩǻÇ≠ǃLJçœÇfiÇÊǧDžÇ∑ÇÈ 1 ǬÇÃÉeÉNÉjÉbÉNÇΔǵǃÇÕÅAGetMovieImporterForDataRef ä÷êîÇégǡǃìKêÿÇ»ÉÄÅ[ÉrÅ[ÉCÉìÉ|Å[ÉgÉRÉìÉ|Å[ÉlÉìÉgÇå©Ç¬ÇØÅAÉCÉìÉ|Å[ÉgêÊÇÃÉÅÉfÉBÉAÉ^ÉCÉvÇämîFÇ∑ÇÈÇ‚ÇËï˚ǙdžÇËÇ‹Ç∑ÅBDZÇÃÉÅÉfÉBÉAÉ^ÉCÉvÇÕÅAÉCÉìÉ|Å[É^Ç™çÏê¨Ç∑ÇÈÉÅÉfÉBÉAÉgÉâÉbÉNÇÃéÌófiÇé¶ÇµÇ‹Ç∑ÅiNULL ÇÃèÍçáÇÕÅAï°êîÇÃÉÅÉfÉBÉAÉ^ÉCÉvÇ™ÉtÉ@ÉCÉãÇ…ä‹Ç‹ÇÍǃǢÇÈDZÇΔÇé¶ÇµÇ‹Ç∑ÅjÅBDZÇÃï˚ñ@ÇÕÅAïKÇ∏ǵLJÉtÉ@ÉCÉãÇÉCÉìÉ|Å[ÉgÇ∑ÇÈLJÇÃÇ≈ÇÕÇ»Ç≠ÅAäJÇ≠DZÇΔÇ≥ǶLJïKóvÇΔǵNjÇπÇÒÅB

ÉCÉìÉ|Å[ÉgêÊÇÃÉÅÉfÉBÉAÉ^ÉCÉvÇÃèÓïÒÇÕÅAéüÇÃÇ¢Ç∏ÇÍÇ©ÇÃèÍèäÇ≈ämîFÇ≈Ç´Ç‹Ç∑ÅBÇ∑Ç»ÇÌÇøÅAÉRÉìÉ|Å[ÉlÉìÉgìoò^èÓïÒÅiComponentDescription ÉåÉRÅ[Éhì‡ÅjÇÃêªë¢å≥ÉtÉBÅ[ÉãÉhÇΔǵǃégÇÌÇÍǃǢÇÈ 4 ï∂éöÇÃÉRÅ[ÉhÅAÇ‹ÇΩÇÕÉCÉìÉ|Å[É^ÉRÉìÉ|Å[ÉlÉìÉgÇ™ÉRÉìÉ|Å[ÉlÉìÉgÉtÉâÉO movieImportMustGetDestinationMediaType ÇÉTÉ|Å[ÉgǵǃǢÇÈèÍçáÇÕÅAÉRÉìÉ|Å[ÉlÉìÉgÇà MovieImportGetDestinationMediaType ä÷êîÇåƒÇ—èoÇ∑DZÇΔÇ…ÇÊǡǃÅiÇΩÇæÇµÅADZÇÃä÷êîÇÕÅACarbon ÉAÉvÉäÉPÅ[ÉVÉáÉìÇ©ÇÁÇÕåƒÇ—èoÇπǻǢÇΔǢǧïsãÔçá (r. 3328291) ǙdžÇËÇ‹Ç∑ÅjÅAÉCÉìÉ|Å[ÉgêÊÇÃÉÅÉfÉBÉAÉ^ÉCÉvÇéÊìæÇ≈Ç´Ç‹Ç∑ÅBMovieImportGetDestinationMediaType ÇÃÉeÉNÉjÉbÉNÇÕÅAÇÊÇËêVǵǢÅiQuickTime 6 à»ç~ÇÃÅjÉRÉìÉ|Å[ÉlÉìÉgÇ…ëŒÇµÇƒÇÃÇ›égópÇ≈Ç´Ç‹Ç∑ÅB

ÉCÉìÉ|Å[ÉgêÊÇÃÉÅÉfÉBÉAÉ^ÉCÉvÇ™ 0 à»äOÇÃèÍçáÇÕÅAÉCÉìÉ|Å[É^Ç™ì¡íËÇÃÉÅÉfÉBÉAÅiÉgÉâÉbÉNÅjÉ^ÉCÉvÇ≈ÇÃÇ›ÉÄÅ[ÉrÅ[ÇçÏê¨Ç∑ÇÈDZÇΔÇé¶ÇµÇ‹Ç∑ÅBAVI Ç‚ DV ÇÃèÍçáÇÃÇÊǧDžÅAÉCÉìÉ|Å[ÉgêÊÇÃÉÅÉfÉBÉAÉ^ÉCÉvÇ™ 0 ÇÃèÍçáÇÕÅAÉCÉìÉ|Å[É^Ç™ï°êîÇÃÉÅÉfÉBÉAÉ^ÉCÉvÇç¨çáǵÇΩÉtÉ@ÉCÉãÇçÏê¨Ç∑ÇÈDZÇΔÇé¶ÇµÇ‹Ç∑ÅBå„é“ÇÃèÍçáÅAÉtÉ@ÉCÉãÇ…ÉIÅ[ÉfÉBÉIÉfÅ[É^Ç™ä‹Ç‹ÇÍǃǢÇÈDZÇΔÇ™çlǶÇÁÇÍÇ‹Ç∑Ç™ÅAé¿ç€Ç…ÉtÉ@ÉCÉãÇÉCÉìÉ|Å[ÉgǵǃÇ≥NjǥNjǻÉgÉâÉbÉNÇí≤ç∏ÇµÇ»ÇØÇÍÇŒï™Ç©ÇËÇ‹ÇπÇÒÅB

à»â∫Ç…è–âÓÇ∑ÇÈ Navigation Services ÇÃÉtÉBÉãÉ^ä÷êîÇÃÉTÉìÉvÉãÇÕÅACanQuickTimeOpenFile API ÇégǡǃÅAQuickTime Ç≈äJÇØÇÈÇ∑Ç◊ǃÇÃÉtÉ@ÉCÉãÇÉ`ÉFÉbÉNÇ∑ÇÈï˚ñ@ÇΔÅAGetMovieImporterForDataRef ÇΔ MovieImportGetDestinationMediaType ÇégǡǃÅAÉÄÅ[ÉrÅ[ÉCÉìÉ|Å[É^Ç…ëŒÇµÇƒÉCÉìÉ|Å[ÉgêÊÇÃÉÅÉfÉBÉAÉ^ÉCÉvÇèΔâÔǵÅAì¡íËÇÃÉÅÉfÉBÉAÉ^ÉCÉvÇÃÉtÉ@ÉCÉãÇ…çiÇËçûÇfiï˚ñ@Çé¶ÇµÇƒÇ¢Ç‹Ç∑ÅB



ÉäÉXÉg 1. Navigation Services ÉtÉBÉãÉ^ÉvÉçÉVÅ[ÉWÉÉÇ≈Çà QuickTime ÉÅÉfÉBÉAÉ^ÉCÉvÇÃÉtÉBÉãÉ^èàóù


#define kAliasDataRefType FOUR_CHAR_CODE('alis')

#define SHOW_ONLY_AUDIO_FILES   1 
#define SHOW_ONLY_VIDEO_FILES   0


OSStatus    GetFSSpecFromAEDesc( FSSpec *fsspec, AEDesc* theItem )
{
    OSStatus    err           = noErr;
    AEDesc      coerceDesc    = { NULL, NULL };

    /* AEDesc Ç™Ç‹Çæ FSSpec Ç≈ǻǢèÍçáÇÕÅAFSSpec Ç…ïœä∑Ç∑ÇÈ... */
    if (theItem->descriptorType != typeFSS)
    {
        err = AECoerceDesc( theItem, typeFSS, &coerceDesc );
        /* AEDesc Ç©ÇÁ FSSpec ÇéÊìæÇ∑ÇÈ */
        if ( err == noErr )
        {
            err = AEGetDescData( &coerceDesc, fsspec, sizeof(FSSpec) );
            AEDisposeDesc( &coerceDesc );
        }
    }
    else
    {
        err = AEGetDescData( theItem, fsspec, sizeof(FSSpec) );
    }

    return( err );
}



pascal Boolean NavLaunchServicesFilterProc(AEDesc* theItem,
                                            void* info,
                                            NavCallBackUserData ioUserData,
                                            NavFilterModes filterMode)
    {
    #pragma unused(ioUserData)

    NavFileOrFolderInfo *myInfo     = (NavFileOrFolderInfo *)info;
    OSStatus            err         = noErr;
    Boolean             showItem    = false;
    FSSpec              fsspec;


    if ( filterMode == kNavFilteringBrowserList )
    {
        if (theItem->descriptorType == typeFSS)
        {
            /* ÉtÉ@ÉCÉãÇ‹ÇΩÇÕÉtÉHÉãÉ_ÇÃÇ«ÇøÇÁÇ©ÅH */
            if (myInfo->isFolder)
            {
                /* Ç∑Ç◊ǃÇÃÉtÉHÉãÉ_Çï\é¶ */
                showItem = true;
            }
            else    /* ÉtÉ@ÉCÉãÇÕdžÇÈÇ™ÉtÉHÉãÉ_ÇÕǻǢ */ 
            {
                Boolean outCanOpenWithGraphicsImporter  = false;
                Boolean outCanOpenAsMovie               = false;

                err = GetFSSpecFromAEDesc( &fsspec, theItem );
                if ( err != noErr ) goto BailWithError;
/*
CanQuickTimeOpenFile ä÷êîÇ…ä÷Ç∑ÇÈéQçlï∂å£ÇÅAñ{ï∂èëÇÃç≈å„Ç…é¶ÇµÇ‹Ç∑ÅB


ëŒè€ÉtÉ@ÉCÉãÇà FSSpec ÇìnÇ∑ÇæÇØÇ≈ÅAQuickTime ÇÕÅA
outCanOpenWithGraphicsImporter ÉpÉâÉÅÅ[É^ÇΔ outCanOpenAsMovie 
ÉpÉâÉÅÅ[É^ÇÃíÜÇ≈ÅAÉtÉ@ÉCÉãÇ™ÉOÉâÉtÉBÉbÉNÉXÉCÉìÉ|Å[É^ÇégǡǃÅA
Ç‹ÇΩÇÕǪÇÃNjNjÉÄÅ[ÉrÅ[ÇΔǵǃäJÇØÇÈǩǫǧǩÇé¶Ç∑ílÇï‘ǵNjÇ∑ÅB


ì¡Ç…ãªñ°ê[Ç¢ÇÃÇÕÅAinFlags ÉpÉâÉÅÅ[É^ÇΔǵǃìnÇπÇÈäeéÌÇÃÉtÉâÉOÇ≈Ç∑ÅB
DZÇÍÇÁÇÕÅAQuickTime ÇÃåüçıï˚ñ@Ç…âeãøÇó^ǶNjÇ∑ÅB
éüÇ…äeéÌÉtÉâÉOÇÃÉäÉXÉgÇé¶ÇµÇ‹Ç∑ÅB


-inFlags íËêî-

kQTDontUseDataToFindImporter

DZÇÃÉtÉâÉOÇÕÅAÉtÉ@ÉCÉãíÜÇÃÉfÅ[É^ÇåüçıÇ…ÇÕóòópǵǻǢÇÊǧDž
QuickTime Ç…éwé¶ÇµÇ‹Ç∑ÅBDZÇÍÇ…ÇÊÇËÅAäJÇØÇÈÉtÉ@ÉCÉãǙǻǢÇΔǢǧ
åãâ Ç™ï‘Ç≥ÇÍÇÈèÍçáÇ…ÇÕì¡Ç…åüçıÇÃë¨ìxÇÕè„Ç™ÇËÇ‹Ç∑Ç™ÅA
QuickTime ÇÕÅAÉtÉ@ÉCÉãÉ^ÉCÉvÇ‚ÉtÉ@ÉCÉãägí£éqÇ≈îFéØÇ≈ǴǻǢ
ÉtÉ@ÉCÉãÇäJÇØÇ»Ç¢ÇΔïÒçêÇ∑ÇÈDZÇΔÇ…Ç»ÇËÇ‹Ç∑ÅB

kQTDontLookForMovieImporterIfGraphicsImporterFound

DZÇÃÉtÉâÉOÇÕÅAÉtÉ@ÉCÉãÇäJÇ≠ï˚ñ@Ç™å©Ç¬Ç©Ç¡ÇΩéûì_Ç≈ÅA
QuickTime Ç…åüçıÇèIóπÇ∑ÇÈÇÊǧDžéwé¶ÇµÇ‹Ç∑ÅBÉtÉ@ÉCÉãÇ™ÅA
ÉOÉâÉtÉBÉbÉNÉXÉCÉìÉ|Å[É^ÇégǡǃNjÇΩÇÕǪÇÃNjNjÉÄÅ[ÉrÅ[ÇΔǵǃ
äJÇØÇÈǩǫǧǩÇímÇËÇΩÇ¢èÍçáÅAǪǵǃǪÇÃï˚ñ@Çñ‚ÇÌǻǢèÍçáÇ…
DZÇÃÉtÉâÉOÇìnǵNjÇ∑ÅB


kQTAllowOpeningStillImagesAsMovies

DZÇÃÉtÉâÉOÇÕÅAQuickTime Ç…ÅAê√é~âÊÇÉÄÅ[ÉrÅ[ÇΔǵǃäJÇ≠DZÇΔÇ
åüì¢Ç∑ÇÈÇÊǧDžéwé¶ÇµÇ‹Ç∑ÅBDZÇÃÉtÉâÉOÇÉOÉâÉtÉBÉbÉNÉXÉCÉìÉ|Å[É^Ç≈
äJÇØÇÈÇΔÇ´ÅAQuickTime ÇÕé©ìÆìIÇ…ÅAÉtÉ@ÉCÉãÇÉÄÅ[ÉrÅ[ÇΔǵǃäJÇØÇÈ
ÇΔïÒçêǵNjÇ∑ÅB

kQTAllowImportersThatWouldCreateNewFile

DZÇÃÉtÉâÉOÇÕÅAQuickTime Ç…ÅAêVǵǢÉtÉ@ÉCÉãÇçÏê¨Ç∑ÇÈÉCÉìÉ|Å[É^Ç
ä‹ÇflÇÈÇÊǧDžéwé¶ÇµÇ‹Ç∑ÅBDZÇÃÉtÉâÉOÇ™ÉNÉäÉAÇ≥ÇÍǃǢÇÈèÍçáÅA
QuickTime ÇÕÅAêVǵǢÉtÉ@ÉCÉãÇçÏê¨ÇµÇ»Ç≠ǃLJǪÇÃNjNj
ÉCÉìÉ|Å[ÉgÇ≈Ç´ÇÈÉCÉìÉ|Å[É^ÇÃÇ›Çä‹ÇflÇ‹Ç∑ÅB


kQTAllowAggressiveImporters

DZÇÃÉtÉâÉOÇÕÅAPICT Ç‚ TEXT ÇÃÇÊǧǻí ó·ÉÄÅ[ÉrÅ[ÇΔÇÕçlǶÇÁÇÍǻǢ
ÉtÉ@ÉCÉãÉ^ÉCÉvÇÃÇΩÇflÇ…ÉÄÅ[ÉrÅ[ÉCÉìÉ|Å[É^Çä‹ÇflÇÈÇÊǧDžéwé¶ÇµÇ‹Ç∑ÅB
DZÇÃÉtÉâÉOÇ™ÉNÉäÉAÇ≥ÇÍǃǢÇÈèÍçáÅAQuickTime ÇÕÅADZÇÍÇÁÇÃ
ÉÄÅ[ÉrÅ[ÉCÉìÉ|Å[É^ÇèúäOǵNjÇ∑ÅB


åüçıÇÃë¨ìxÇ™å¸è„Ç∑ÇÈÇÃÇ≈ÅAÉtÉ@ÉCÉãÇäJÇ≠ï˚ñ@Ç…Ç±ÇæÇÌÇÁǻǢèÍçáÇÕÅA
kQTDontLookForMovieImporterIfGraphicsImporterFound
ÉtÉâÉOÇÃégópÇêÑèßǵNjÇ∑ÅBèÛãµÇ…ÇÊǡǃÇÕÅAåüçıÇÃë¨ìxÇå¸è„Ç≥ÇπÇÈ 
kQTDontUseDataToFindImporter ÉtÉâÉOÇégǧÇÃÇ™ï÷óòǩLJǵÇÍÇ‹ÇπÇÒÇ™ÅA
åáì_ÇÕÅAägí£éqÇ‹ÇΩÇÕÉtÉ@ÉCÉãÉ^ÉCÉvÇîFéØÇ≈ǴǻǢÉtÉ@ÉCÉãÇÉXÉLÉbÉv
ǵǃǵNjǧDZÇΔÇ≈Ç∑ÅB


*/

                err = CanQuickTimeOpenFile(
                    &fsspec,
                        /* ÉtÉ@ÉCÉãÇÃéÌófiÅBï™Ç©ÇÁǻǢèÍçáÇÕ 0 */
                    myInfo->fileAndFolder.fileInfo.finderInfo.fdType,
                        /* ÉtÉ@ÉCÉãÇÃägí£éqÅBï™Ç©ÇÁǻǢèÍçáÇÕ 0 */
                    0,
                        /* ÉtÉ@ÉCÉãÇÉOÉâÉtÉBÉbÉNÉXÉCÉìÉ|Å[É^Ç≈äJÇØÇÈèÍçáÇÕ true Çï‘Ç∑
                            */
            #if SHOW_ONLY_VIDEO_FILES
                    &outCanOpenWithGraphicsImporter,
            #elif SHOW_ONLY_AUDIO_FILES
                    0,
            #endif
                        /* ÉtÉ@ÉCÉãÇÉÄÅ[ÉrÅ[ÉCÉìÉ|Å[É^Ç≈äJÇØÇÈèÍçáÇÕ true Çï‘Ç∑
                            */
                    &outCanOpenAsMovie,
                        /* ÉtÉ@ÉCÉãÇÉOÉâÉtÉBÉbÉNÉXÉCÉìÉ|Å[É^Ç‹ÇΩÇÕÉÄÅ[ÉrÅ[ÉCÉìÉ|Å[É^ÇÃ
                           Ç«ÇøÇÁÇ≈LJäJÇØÇÈèÍçáÇÕÅAtrue Çï‘Ç∑Ç™
                           QuickTime ÇÕÉOÉâÉtÉBÉbÉNÉXÉCÉìÉ|Å[É^ÇÃégópÇóDêÊÇ∑ÇÈ 
                            */
                    nil,
                     /* inFlags
Å@Å@Å@Å@Å@Å@Å@Å@Å@Å@Å@Å@QuickTime Ç…ÅAÉtÉ@ÉCÉãÇå©Ç¬ÇØéüëÊåüçıÇèIóπÇ∑ÇÈÇÊǧDžéwé¶Ç∑ÇÈÇΩÇflÇ…
Å@Å@Å@Å@Å@Å@Å@Å@Å@Å@Å@Å@kQTDontLookForMovieImporterIfGraphicsImporterFound ÇéwíËÇ∑ÇÈ
                        ÉtÉ@ÉCÉãÇÅAÉOÉâÉtÉBÉbÉNÉXÉCÉìÉ|Å[É^ÇégǡǃäJÇØÇÈÇ©ÅA
                        ÉÄÅ[ÉrÅ[ÇΔǵǃäJÇØÇÈÇ©ÇÕñ‚ÇÌǻǢ */
                    kQTDontLookForMovieImporterIfGraphicsImporterFound);

                if ( err != noErr ) goto BailWithError;

                if (outCanOpenAsMovie)
                {
                    OSErr                   err = noErr;
                        // ÉtÉ@ÉCÉãÉ^ÉCÉvÇ…ä÷òAïtÇØÇÁÇÍǃǢÇÈ MovieImport
                        // ÉRÉìÉ|Å[ÉlÉìÉg
                    Component               theImporter = nil;
                        // componentManufacturer Çå©ÇÈÇΩÇflÇ…égóp
                    ComponentDescription    cd;                         
                    OSType                  destinationMediaType = 0;
                    long                    myFlags = 0;                
                    AliasHandle             theAliasHandle;

                    // ÉGÉCÉäÉAÉXÉfÅ[É^éQèΔÇçÏê¨

                    err = NewAlias(nil, &fsspec, &theAliasHandle);
                    if (err == noErr)
                    {
                        // ÉCÉìÉ|Å[É^ÉRÉìÉ|Å[ÉlÉìÉgÇíTÇ∑
                        // ÅiComponentInstance Ç≈ÇÕǻǢÇÃÇ≈ÅA
                        // džÇΔÇ≈ï¬Ç∂ÇÈïKóvÇÕǻǢÅj

                        err = GetMovieImporterForDataRef(kAliasDataRefType,
                                                    (Handle)theAliasHandle,
                                                    myFlags,
                                                    &theImporter);

                        if (noErr == err) 
                        {
                            // ê‡ñæÇÃÉtÉâÉOÇΔêªë¢å≥É^ÉCÉv
                            // ÇÃÉtÉBÅ[ÉãÉhÇå©ÇÈ
                            GetComponentInfo(theImporter, 
                                &cd, nil, nil, nil);

                        // DZÇÃÉRÉìÉ|Å[ÉlÉìÉgÇ…ÇÊǡǃ 
                        // movieImportMustGetDestinationMediaType Ç™ê›íËÇ≥ÇÍǃ
                        // Ç¢ÇÈèÍçáÇÕÅAMovieImportGetDestinationMediaType
                        // ÇDZÇÃÉRÉìÉ|Å[ÉlÉìÉgÇ…åƒÇ—èoÇ∑DZÇΔÇ…ÇÊÇËÅAëóÇË
                        // êÊÇÃÉÅÉfÉBÉAÉ^ÉCÉvÇèΔâÔÇ≈Ç´ÇÈDZÇΔÇé¶Ç∑

                            if (cd.componentFlags &
                                    movieImportMustGetDestinationMediaType)
                            {

                                // ÉCÉìÉ|Å[É^Ç…ÉCÉìÉ|Å[ÉgêÊÇÃÉÅÉfÉBÉAÉ^ÉCÉvÇêqÇÀÇÈ
                                // ÅiíçÅFÉCÉìÉ|Å[É^ÉRÉìÉ|Å[ÉlÉìÉgÇäJÇ≠
                                // ïKóvÇÕǻǢÅBïKóvÇ»èàóùÇ™é©ìÆìIÇ…çsÇÌÇÍÇÈÅj

                                MovieImportGetDestinationMediaType(
                                    (MovieImportComponent)theImporter,
                                    &destinationMediaType);
                            }

                            else    // GetComponentInfo Ç©ÇÁÇÃêªë¢å≥É^ÉCÉv
                                    // ÇégópÇ∑ÇÈÅBêªë¢å≥ÉtÉBÅ[ÉãÉhÇÕÅA
                                    // ÉRÉìÉ|Å[ÉlÉìÉgÇ…ÇÊǡǃÉTÉ|Å[ÉgÇ≥ÇÍÇÈ
                                    // QuickTime ÉÅÉfÉBÉAÉ^ÉCÉvÇé¶ÇµÇƒÇ¢ÇÈ
                                    // ÅiÇΩÇΔǶnjÅAÉTÉEÉìÉhÇÕ 'soun'ÅjÅB
                                    // ÉTÉuÉ^ÉCÉvÇÃílÇÕÅAÉRÉìÉ|Å[ÉlÉìÉgÇ™
                                    // ÉCÉìÉ|Å[ÉgÇ≈Ç´ÇÈÉfÅ[É^É^ÉCÉvÇ
                                    // é¶Ç∑ÅiÇΩÇΔǶnj 'AIFF'Åj
                            {
                                destinationMediaType = 
                                    cd.componentManufacturer;
                            }
                        }

                        // else

                        // DZÇÃå`éÆópÇÃÉCÉìÉ|Å[É^ÇÕë∂ç›ÇµÇ»Ç¢Ç™ QuickTime Ç™
                        // DZÇÃå`éÆÅiQuickTime ÉÄÅ[ÉrÅ[ÉtÉ@ÉCÉãÅj
                        // ÇäJÇ≠DZÇΔÇ™Ç≈Ç´ÇÈÇ©ÅAÇ‹ÇΩÇÕÉCÉìÉ|Å[É^Ç™
                        // ë∂ç›ÇµÇ»Ç¢Ç©ÇÃÇ¢Ç∏ÇÍÇ©ÅBÇ«ÇøÇÁÇÃèÍçáLJÅA
                        // destinationMediaType ÇÕ 0

                        // åªéûì_Ç≈ÇÕÅAéøñ‚ÇÃìöǶDžÇÕ destinationMediaType
                        // ÅiǮǪÇÁÇ≠ 0ÅjÇégǧ
                        //

                        // ÉÅÉfÉBÉAÉ^ÉCÉvÇ™ï™Ç©Ç¡ÇƒÇ®ÇËÅAÉTÉ|Å[Égǵǃ
                        // Ç¢ÇÈÉgÉâÉbÉNÉ^ÉCÉvÇämîFÇ≈Ç´ÇÈÅB
                        // ǪÇÍÇîFéØÇ≈ǴǻǩǡÇΩèÍçáÇÕÅAÉtÉ@ÉCÉãÇäJÇ´ÅA
                        // GetMovieIndTrackType Çégǡǃ
                        // í≤Ç◊ÇÈïKóvǙdžÇÈ

                        if (destinationMediaType)
                        {
                        
                    #if SHOW_ONLY_AUDIO_FILES
                            // ÉTÉEÉìÉh ('soun') ÉÅÉfÉBÉAÉ^ÉCÉvǩǫǧǩÇÉ`ÉFÉbÉN
                            if (destinationMediaType == SoundMediaType)
                    #elif SHOW_ONLY_VIDEO_FILES
                            // ÉrÉfÉI ('vide') ÉÅÉfÉBÉAÉ^ÉCÉvǩǫǧǩÇÉ`ÉFÉbÉN
                            if (destinationMediaType == VideoMediaType)
                    #endif
                    
                            {
                                showItem = true;
                            }
                        }
                        else    // óLóÕÇ»èÓïÒǙǻǢÇΩÇflÅAäJǢǃ
                                // GetMovieIndTrackType Çégǡǃ
                                // ÉÄÅ[ÉrÅ[ÇÃÉgÉâÉbÉNÇí≤Ç◊ÇÈÅB
                                // ǪÇÃå„ÅAïKÇ∏ÉÄÅ[ÉrÅ[Çï¬Ç∂ÇÈ
                        {
                            OSErr err = noErr;
                            short fileRefNum = 0;

                            err = OpenMovieFile(&fsspec, 
                                                &fileRefNum,
                                                fsRdPerm);
                            if (err == noErr)
                            {
                                // ç≈èâÇÃÉÄÅ[ÉrÅ[ÇéÊìæÇµÇΩÇ¢
                                short   resID = 0;
                                Movie   theMovie = nil;

                                err = NewMovieFromFile(&theMovie,
                                                        fileRefNum,
                                                        &resID,
                                                        NULL,
                                                        newMovieActive,
                                                        NULL);
                                if (err == noErr)
                                {
                                    // ÉgÉâÉbÉNÅiÉÅÉfÉBÉAÅjÉ^ÉCÉvÇí≤Ç◊ÇÈ

                                    if(GetMovieIndTrackType(theMovie,
                                                1L,
                                    #if SHOW_ONLY_AUDIO_FILES
                                                SoundMediaType,
                                    #elif SHOW_ONLY_VIDEO_FILES
                                                VideoMediaType,
                                    #endif
                                                movieTrackMediaType))
                                        {
                                            // ÉÄÅ[ÉrÅ[ÇÕäÛñ]ÇÃÉÅÉfÉBÉAÉ^ÉCÉvÅI

                                            showItem = true;
                                        }
                                    DisposeMovie(theMovie);
                                }
                                CloseMovieFile(fileRefNum);
                            }
                        }
                        DisposeHandle((Handle)theAliasHandle);
                    }
                }
                else if (outCanOpenWithGraphicsImporter)
                {
                    showItem = true;
                }
            }
        }
    }

    return (showItem);

BailWithError:
    return( false );

}




éQçléëóøÅF

Navigation Services Reference

CanQuickTimeOpenFile API

GetMovieIndTrackType API

MovieImportGetDestinationMediaType API

Movie Data Exchange Components



[2003 îN 7 åé 23 ì˙]